最近由於微服務的興起,所以Docker容器、K8s 容器管理平台成為大家常用且關注的對象,也有很多前輩針對這些議題撰寫相關的鐵人賽文章。但常言道"資安即國安",一直沒辦法找到針對這些領域有一個完整系列來講解他們的安全議題,直到今年 Hitcon Training 2023 才開始有講師又開始針對這個議題來介紹,像是 HackerCat 的 "Container Security 容器安全之其實你不懂 Docker" 以及 Boik Su 的 "Kubernetes 安全實戰"。
但本著既然找不到就自己來做一個,所以今年鐵人賽的題目有可能會定為 怕痛的我,只好把 Docker、K8s 的攻擊、防禦、偵測點滿就對了。以下是這個系列賽預計會講解的章節跟篇幅 :
攻擊篇 Ch1 ~ Ch3 Day25 - (輕鬆系列) 一口氣看完 (攻擊篇) 第一季內容
Ch1. 容器介紹及逃逸手法
Ch2. Kubernetes 介紹及 pod 逃逸手法
Ch3. Kubernetes 攻擊手法介紹 (RBAC、內部元件)
容器防禦、偵測篇 Ch4 ~ Ch8
Kubernetes 防禦、偵測篇 Ch9 ~ Ch10
期中考試
期末考試
雖然今天只是開賽,但不免俗地還是要介紹一下相關背景以及建立基本的操作環境。
Container 是一種作業系統虛擬化的形式。其內部包含所有必要的執行檔、二進位程式碼、程式庫和組態檔。與虛擬機相比,Container 所使用的資源是作業系統虛擬化出來的,因此無須包含作業系統層。這使它們更輕巧、執行效能更高。
來源: Difference between VM vs Docker
但在大型的應用程式部署中,可能需要面臨控管數十個甚至是數百個容器的管理,假如都要手動進行部署、重啟、擴張等需求勢必會增加許多管理成本。這時候就需要Container Orchestrator 類的平台來協助管理,例如 Kubernetes。
依照 wiki 定義,Kubernetes(常簡稱為K8s)是用於自動部署、擴充和管理「容器化(containerized)應用程式」的開源系統。而 Kubernetes 的系統架構圖參考如下,這邊先不細說裡面有甚麼,總之可以觀察出來多了不少元件。
但 Kubernetes 多了更多元件,也意味著更多的可能被攻擊的機會,也因此本系列就是要從容器安全開始一路講到 Kubernetes 的安全。從建置環境、攻擊環境開始一路講到如何防禦、偵測這些攻擊。本次會用到的作業系統以及相關軟體參考如下 :
相關作業系統參考如下 :
使用軟體如下 :
第一天先來準備使用環境,為了方便到時候期中考、期末考回復環境,建議使用 VirtualBox 方便做快照跟還原。安裝步驟可以參考 Day13 - Pwnkit 可不可以讓我提權一下下就好。
sudo apt update ;
sudo apt install net-tools ncat -y ;
# 下載 v5.16.20 相關檔案
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.20/amd64/linux-headers-5.16.20-051620-generic_5.16.20-051620.202204131933_amd64.deb ;
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.20/amd64/linux-headers-5.16.20-051620_5.16.20-051620.202204131933_all.deb ;
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.20/amd64/linux-image-unsigned-5.16.20-051620-generic_5.16.20-051620.202204131933_amd64.deb ;
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16.20/amd64/linux-modules-5.16.20-051620-generic_5.16.20-051620.202204131933_amd64.deb ;
# 不要一個個安裝,會失敗,讓系統自己決定相依性
sudo dpkg -i *.deb ;
sudo update-grub ;
sudo shutdown -r now ;
#理論上會顯示 5.16.20-051620-generic
uname -r ;
sudo apt-get update ;
sudo apt-get install ca-certificates curl gnupg -y ;
sudo install -m 0755 -d /etc/apt/keyrings ;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg ;
sudo chmod a+r /etc/apt/keyrings/docker.gpg ;
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ;
sudo apt-get update ;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y ;
# 應該要失敗,除非你是 root
docker ps ;
#把目前帳號加到 docker 群組中
sudo usermod -aG docker $(whoami) ;
#登出後再登入
exit ;
# 應該會成功了吧?
docker ps ;
大概今天就到這邊了,針對今天的環境可以先建立一個快照,方便之後期中考切回來做使用。
作業1 : 第一天就有回家作業了 ,因為後期會用到 CentOS 的環境,所以練習用 CentOS 7 建立一個一樣的環境出來,大概就是 Server 版功能並且在上面安裝 docker (PS. CentOS kernel版本部分無須更動)。到時候期中考會用到這台機器喔~~!!!! (提示: 要記得去 /etc/sysconfig/network-scripts/ifcfg-XXX 設定 ONBOOT=yes)
今日總結 :